public class code2 {
    public int lenLongestFibSubseq(int[] arr) {
        //哈希表优化
        Map<Integer,Integer> hash = new HashMap<>();
        int n = arr.length;
        for(int i=0;i<n;i++) hash.put(arr[i],i);

        int[][] dp = new int[n][n];
        //初始化
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                dp[i][j] = 2;

        int ret =2;
        for(int j=2;j<n;j++) {//最后一个数得从第3个位置开始
            for(int i=1;i<n;i++) {//倒数第二个数得从第2个位置开始
                int a = arr[j]-arr[i];//第一个数的大小
                if(a<arr[i]&&hash.containsKey(a)) {
                    dp[i][j] = dp[hash.get(a)][i] + 1;
                }
                ret = Math.max(ret,dp[i][j]);
            }
        }

        return ret<3?0:ret;
    }
}
